package com.qxy.practice.concurrent;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * @author : 戚欣扬
 * @Description : 线程同步队列的两种使用
 */
public class SyncListDemo {
     /**
      * 如果我们使用ArrayList造100个线程去读写同一个list，会报ConcurrentModifyException ：
      *         if (to > es.length) {
      *             throw new ConcurrentModificationException();
      *         }
      * 1.使用工具类转换为线程安全集合 Collections. 2.使用 CopyOnWirte 读写分离，写时复制
      */


    public static void main(String[] args) {
       //   List<String> list =  Collections.synchronizedList(new ArrayList<>());//new ArrayList<>();
        List<String> list = new CopyOnWriteArrayList<>();
        // HashSet 同理 HashMap 采用 ConcurrentHashMap
        for (int i = 0; i < 100; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,6));
                System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
}


